package com.swordget.service;

import com.alibaba.fastjson.JSONArray;
import com.swordget.entity.ColumnDesign;
import com.swordget.entity.TableDesign;
import com.swordget.entity.bo.ImportResolveBo;
import com.swordget.entity.po.DataQueryPo;
import com.swordget.entity.vo.InputStructVo;
import com.swordget.entity.vo.SimplePageRequestVo;

import java.io.File;
import java.util.List;

/**
 * @Author: David
 * @Date: Created in 18:33 2020/4/7
 * @Description: 分页服务
 * @Modified By:
 * @Version: 0.0.1
 */
public interface DataHandlerService {

    /**
     * 数据查询接口，不处理分页,默认查全部
     * @param pageVo
     * @return
     */
    DataQueryPo dataQuery(SimplePageRequestVo pageVo);





    /**
     * 数据添加
     * @param tableDesign 数据表结构
     * @param inputStructVos input 结构
     * @param loginId 操作用户
     * @param orgId
     * @return
     */
    boolean dataAdd(TableDesign tableDesign, List<InputStructVo> inputStructVos, String loginId, String orgId);

    /**
     * 数据添加
     * @param tableName 数据表名称
     * @param datas 要添加的数据
     * @param loginId 操作用户
     * @return
     */
    boolean dataAdd(String tableName, List<String> columns, String[][] datas, String loginId);

    /**
     * 修改指定表数据
     * @param tableDesign
     * @param inputStructVos
     * @param loginId
     * @param orgId
     * @return
     */
    boolean dataModify(TableDesign tableDesign, List<InputStructVo> inputStructVos, String loginId, String orgId);

    /**
     * 删除指定表数据
     * @param tableDesign
     * @param list
     * @param loginId
     * @return
     */
    boolean dataRemove(TableDesign tableDesign, List<String> list, String loginId);


    /**
     * 校验查询参数是否正确
     * @param params
     * @param columns
     */
    void checkQueryParams(JSONArray params, List<String> columns);

    /**
     * 获取查询数据总量
     * @param tableName 表名
     * @param params 查询参数
     * @return
     */
    int getTotal(String tableName, JSONArray params,String[] serials, String dataSourceId);

    /**
     *
     * @param rows
     * @param page
     * @param tableName
     * @param queryParam
     * @param columns
     * @param types
     * @return
     */
    List<List<String>> queryData(int rows, int page, String tableName, JSONArray queryParam, List<String> columns,
                                 List<String> types);

    /**
     * 适用loadData 方式插入数据
     * @param loadData
     * @param tableName
     * @param columns
     * @return
     */
    int dataAdd(File loadData, String tableName, List<String> columns) throws Exception;

    /**
     * 复制临时表数据并插入
     * @param tableName 正式表名
     * @param tableNameTmp 临时表名
     * @param tableId 表标识
     * @param importId 导入id
     */
    boolean dataAdd(String tableName, String tableNameTmp, String tableId, String importId);

    /**
     * 根据 importId 删除数据
     * @param tableNameTmp
     * @param importId
     */
    boolean removeByImportId(String tableNameTmp, String importId);

    /**
     * 添加审核日志
     * @param testBo
     * @return
     */
    boolean addCheckLog(ImportResolveBo testBo);

    /**
     * 添加查询状态
     * @param params 查询参数
     * @param dataStatus 查询状态
     * @return
     */
    JSONArray addDataStatus(JSONArray params, String dataStatus);

    /**
     * 提交
     * @param tableDesign 表结构
     * @param searchParams 搜索数据
     * @param list id 集合
     * @param loginId 用户
     * @param dataStatus 数据状态
     * @return
     */
    boolean dataSubmit(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus);

    /**
     * 审核不通过
     * @param tableDesign 表结构
     * @param searchParams 搜索数据
     * @param list 集合
     * @param dataStatus 数据状态
     * @param loginId 用户
     * @param notPassMark
     * @return
     */
   // boolean notPass(TableDesign tableDesign, JSONArray searchParams, List<String> list, String dataStatus, String loginId, String notPassMark);

    /**
     * 审核不通过
     * @param tableDesign 表结构
     * @param searchParams 搜索数据
     * @param list 集合
     * @param dataStatus 数据状态
     * @param loginId 用户
     * @param notPassMark
     * @return
     */
    Integer notPass(TableDesign tableDesign, JSONArray searchParams, List<String> list, String dataStatus, String loginId, String notPassMark);


    /**
     * 同意申请
     * @param tableDesign 表结构
     * @param searchParams 搜索数据
     * @param list 集合
     * @param loginId 数据状态
     * @param dataStatus 数据状态
     * @param orgId
     * @return
     */
    boolean agreeApply(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus, String orgId);

    /**
     * 拒绝申请
     * @param tableDesign
     * @param searchParams
     * @param list
     * @param loginId
     * @param dataStatus
     * @return
     */
    boolean rejectApply(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus);

   // boolean pass(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus, String orgId);

    Integer pass(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus);

    /**
     * 申请删除
     * @param tableDesign
     * @param searchParams
     * @param list
     * @param loginId
     * @param dataStatus
     * @return
     */
    boolean applyRemove(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus);

    boolean applyModify(TableDesign tableDesign, JSONArray searchParams, List<String> list, String loginId, String dataStatus);


    List<List<String>> queryDataByStatus(int rows, int i, String tableName, JSONArray queryParam,
                                         List<String> exportColumns, List<String> types,
                                         List<ColumnDesign> columnDesigns, String[] serials, String dataSourceId);
}
